package cn.biplam.front.template.pageFrame.mdManage;

import cn.biplam.common.wrapper.ErrorMessage;
import cn.biplam.front.html.HtmlDiv;
import cn.biplam.front.html.HtmlValue;
import cn.biplam.front.html.base.HtmlWindow;
import cn.biplam.front.template.base.FieldSet;

/**
 * 元数据管理表信息显示模版，包括表、表列和表关联元数据信息界面和操作
 * @author XiaoRuxing 2009-6-5上午11:18:23
 * @version 1.0
 */
public class MdTable {

	private HtmlWindow table;
	/** 元数据模型表信息界面 */
	private HtmlWindow tableInfo;
	/** 元数据模型表列信息界面 */
	private HtmlWindow tableColInfo;
	/** 元数据对象关联信息界面 */
	private HtmlWindow tableRef;
	/** 元数据模型表的记录值，隐藏的input用于数据通信 */
	private HtmlValue tableID;
	/** 此模版对象页面 */
	private String ID;
	/** 记录ID，模版显示的元数据对象的记录ID */
	private String recordID;
	
	/**
	 * 传入页面ID创建元数据管理表详细信息显示界面
	 * @param ID 页面ID
	 * @throws ErrorMessage 
	 */
	public MdTable(String ID) throws ErrorMessage{
		this(ID,null);
	}
	
	/**
	 * 传入页面ID和元数据表记录ID创建元数据管理表详细信息显示界面
	 * @param ID       页面ID
	 * @param recordID  元数据对象记录ID
	 * @throws ErrorMessage 
	 */
	public MdTable(String ID,String recordID) throws ErrorMessage{
		this.ID=ID;
		this.recordID=recordID;
		_init();
	}
	
	/**
	 * 初始化界面
	 * @throws ErrorMessage 
	 */
	private void _init() throws ErrorMessage{
		this.table=new HtmlDiv(ID);
		if(this.recordID!=null){
			this.tableID=new HtmlValue(ID+"r","."+ID+"r",recordID);
		}
		this.tableInfo=new HtmlDiv(ID+"1");
		this.tableColInfo=new HtmlDiv(ID+"2");
		this.tableRef=new HtmlDiv(ID+"3");
	}
	
	/**
	 * 放入元数据模型表信息界面
	 * @param objectInfo 元数据模型表信息界面
	 * @throws ErrorMessage
	 */
	public void putObject(HtmlWindow objectInfo) throws ErrorMessage{
		if(objectInfo!=null){
			this.tableInfo=objectInfo;
			this.tableInfo.setID(ID+"1");
		}
	}

	/**
	 * 放入元数据模型表列信息界面
	 * @param objectCol  元数据模型表列信息界面
	 * @throws ErrorMessage
	 */
	public void putObjectCol(HtmlWindow objectCol) throws ErrorMessage{
		this.putObjectCol(objectCol,true);
	}
	
	/**
	 * 放入元数据模型表列信息界面
	 * @param objectCol  元数据模型表列信息界面
	 * @param reName     是否从新命名当前组件
	 * @throws ErrorMessage
	 */
	public void putObjectCol(HtmlWindow objectCol,boolean reName) throws ErrorMessage{
		if(objectCol!=null && reName){
			this.tableColInfo=objectCol;
			this.tableColInfo.setID(ID+"2");
		}else if(objectCol!=null){
			this.tableColInfo=objectCol;
		}
	}
	
	/**
	 * 放入元数据模型表列信息界面,在组件外面套一层FieldSet
	 * @param objectCol     元数据模型表列信息界面
	 * @param outLayTitle   外边框标题
	 * @param outLayWidth   外边框宽度
	 * @throws ErrorMessage
	 */
	public void putObjectCol(HtmlWindow objectCol,
			String outLayTitle,int outLayWidth) throws ErrorMessage{
		FieldSet outLay=null;
		if(objectCol!=null){
			outLay=new FieldSet(outLayTitle);
			outLay.put(objectCol);
			HtmlWindow lay = outLay.get();
			lay.setStyleWidth(outLayWidth);
			lay.setMarginTop("5");
			this.putObjectCol(lay,false);
		}
	}
	
	/**
	 * 放入元数据模型表列信息界面,在组件外面套一层FieldSet
	 * @param objectCol     元数据模型表列信息界面
	 * @param outLayTitle   外边框标题
	 * @throws ErrorMessage
	 */
	public void putObjectCol(HtmlWindow objectCol,
			String outLayTitle) throws ErrorMessage{
		FieldSet outLay=null;
		if(objectCol!=null){
			outLay=new FieldSet(outLayTitle);
			outLay.put(objectCol);
			HtmlWindow lay = outLay.get();
			lay.setStyleWidth(objectCol.getLength());
			lay.setMarginTop("5");
			this.putObjectCol(lay,false);
		}
	}

	/**
	 * 放入元数据模型表关联信息界面
	 * @param relation  元数据模型表关联信息界面
	 * @throws ErrorMessage
	 */
	public void putObjectRelation(HtmlWindow relation) throws ErrorMessage{
		this.putObjectRelation(relation,true);
	}
	
	/**
	 * 放入元数据模型表关联信息界面
	 * @param relation  元数据模型表关联信息界面
	 * @param reName    是否从新命名当前组件
	 * @throws ErrorMessage
	 */
	public void putObjectRelation(HtmlWindow relation,boolean reName) throws ErrorMessage{
		if(relation!=null && reName){
			this.tableRef=relation;
			this.tableRef.setID(ID+"3");
		}else if(relation!=null){
			this.tableRef=relation;
		}
	}
	
	/**
	 * 获取元数据管理详细信息显示界面
	 * @return 元数据管理详细信息显示界面
	 * @throws ErrorMessage
	 */
	public HtmlWindow get() throws ErrorMessage {
		table.put(tableInfo);
		table.put(tableColInfo);
		table.put(tableRef);
		if(this.tableID!=null){
			table.put(tableID);
		}
		tableRef.setMarginTop("3");
		return this.table;
	}
}
